from django import http
from django.views import View
from django.core.cache import cache

from apps.areas.models import Area


class ProvinceAreasView(View):
    def get(self, request):

        # 1.去缓存取 省份数据
        province_list = cache.get('province_list')

        # 2.判断有没有
        if not province_list:
            # 3.如果没有  --交互数据库
            print('没有缓存数据....')

            # 根据 parent_id__isnull = True ==省份
            province_model_list = Area.objects.filter(parent_id__isnull=True)

            # 前端要求 Json格式---queySet(数据对象python) 转换
            province_list = []
            for pro in province_model_list:
                province_list.append({'id': pro.id, 'name': pro.name})

            # 将最新交互数据库的数据 -->存入缓存
            cache.set('province_list', province_list, 3600)

        return http.JsonResponse({'code': 0, 'errmsg': '省份数据', 'province_list': province_list})


class SubAreasView(View):
    def get(self, request, pk):
        # 1.去缓存取 省份数据
        sub_data = cache.get('sub_data_'+ str(pk))

        # 2.判断有没有
        if not sub_data:
            # 获取子级信息 --queySet(数据对象python)
            # sub_model_list = Area.objects.filter(parent_id=pk)

            # 1.最简单明了 --id=pk
            # parent_model = Area.objects.get(id=pk)

            # 2.sub_model_list[0] 子级--->父级---- n : 1
            # parent_model = sub_model_list[0].parent

            # 3. id=pk 取省份--根据省份--取子级
            parent_model = Area.objects.get(id=pk)
            sub_model_list = parent_model.subs.all()

            # 前端要求 Json格式---queySet(数据对象python) 转换
            subs = []
            for sub in sub_model_list:
                subs.append({'id': sub.id, 'name': sub.name})

            sub_data = {
                'id': parent_model.id,
                'name': parent_model.name,
                'subs': subs
            }
            # 将最新交互数据库的数据 -->存入缓存
            cache.set('sub_data_'+ str(pk), sub_data, 3600)

        return http.JsonResponse({'code': 0, 'errmsg': '省份数据', 'sub_data': sub_data})
